//============================================================================================
/**
 * @file	sleep.h
 * @brief	スリープモード設定
 * @author	Hiroyuki Nakamura
 * @date	2005.02.28
 */
//============================================================================================
#ifndef SLEEP_H
#define SLEEP_H
#undef GLOBAL
#ifdef SLEEP_H_GLOBAL
#define GLOBAL	/*	*/
#else
#define GLOBAL	extern
#endif


//============================================================================================
//	シンボル定義
//============================================================================================
// スリープ許可フラグ
enum {
	GF_SLEEP_MODE = 0,		// 許可
	GF_SLEEP_HOLD			// 不許可
};

// コールバック設定
enum {
	GF_SLEEP_CB_BEFORE = 0,		// 移行 / 先頭
	GF_SLEEP_CB_AFTER			// 復帰 / 末尾
};

// スリープシステムデータ
typedef struct {
	PMSleepCallbackInfo	b_info;		// 移行時のコールバック情報
	PMSleepCallbackInfo	a_info;		// 復帰時のコールバック情報

	PMWakeUpTrigger	trigger;		// スリープ状態からの復帰要因
	PMLogic			logic;			// キー割込みで復帰する場合のキーの組み合わせ論理
	u16				keyPattern;		// キー割込みで復帰する場合のキー

	u16				heap:15;		// ヒープID
	u16				hold:1;			// スリープ許可フラグ
}GF_SLEEP_SYS;


//============================================================================================
//	グローバル変数
//============================================================================================


//============================================================================================
//	プロトタイプ宣言
//============================================================================================

//============================================================================================
//	設定
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * スリープデータ領域確保、初期化
 *
 * @param	heap	ヒープID
 *
 * @return	スリープデータ領域
 */
//--------------------------------------------------------------------------------------------
GLOBAL GF_SLEEP_SYS * GF_SleepSystemInit( u32 heap );

//--------------------------------------------------------------------------------------------
/**
 * システム消去
 *
 * @param	dat		スリープデータ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepSystemDelete( GF_SLEEP_SYS * dat );

//--------------------------------------------------------------------------------------------
/**
 * スリープのトリガー設定
 *
 * @param	dat		スリープデータ
 * @param	trg		スリープ状態からの復帰要因
 * @param	logic	キー割込みで復帰する場合のキーの組み合わせ論理
 * @param	pat		キー割込みで復帰する場合のキー
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepTriggerSet(
				GF_SLEEP_SYS * dat, PMWakeUpTrigger trg, PMLogic logic, u16 pat );

//--------------------------------------------------------------------------------------------
/**
 * スリープデータ設定
 *
 * @param	dat		スリープデータ
 *
 * @return	none
 *
 * @li	dat->hold : GF_SLEEP_MODE = 即スリープ
 * @li	スリープを不許可にするにはGF_SleepModeSet(GF_SLEEP_HOLD)を呼ぶこと
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepSystemSetAll( GF_SLEEP_SYS * dat );

//--------------------------------------------------------------------------------------------
/**
 * 動作切り替え
 *
 * @param	dat		スリープデータ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_GoSleepMode( GF_SLEEP_SYS * dat );

//--------------------------------------------------------------------------------------------
/**
 * 動作切り替え
 *
 * @param	dat		スリープデータ
 * @param	flg		GF_SLEEP_MODE = 許可, GF_SLEEP_HOLD = 不許可
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepModeSet( GF_SLEEP_SYS * dat, u8 flg );


//============================================================================================
//	コールバック
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * コールバック情報セット
 *
 * @param	dat		スリープデータ
 * @param	info	コールバック情報
 * @param	type	追加タイプ ( GF_SLEEP_CB_BEFORE = 移行時, GF_SLEEP_CB_AFTER = 復帰時 )
 * @param	mode	追加モード ( GF_SLEEP_CB_BEFORE = 先頭へ, GF_SLEEP_CB_AFTER = 末尾へ )
 *
 * @return	none
 *
 * @li	複数登録は未対応
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepCallBackAdd(
				GF_SLEEP_SYS * dat, PMSleepCallbackInfo * info, u8 type, u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * コールバック情報削除
 *
 * @param	dat		スリープデータ
 * @param	id		削除タイプ ( GF_SLEEP_CB_BEFORE = 移行時, GF_SLEEP_CB_AFTER = 復帰時 )
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepCallBackDel( GF_SLEEP_SYS * dat, u8 id );


//============================================================================================
//	本体の開閉でスリープ
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * 本体の開閉でスリープするタスクをセット
 *
 * @param	none
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void GF_SleepCoverCloseAdd( GF_SLEEP_SYS * dat );


#undef	GLOBAL
#endif	/* SLEEP_H */